iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
IT 管理

《把瑣事交給 n8n:零基礎自動化工作流實戰》系列 第 4

Day 04: 【n8n 實戰】串連你的第一個工作流

  • 分享至 

  • xImage
  •  

昨天,我們了解了 Trigger 、RSS Read 和Gmail 節點。我們掌握了每一樣工具的獨立用法,但也留下了一個巨大的懸念:如何將它們串連起來,並解決一次湧入 40 條新聞的問題?這就是今天要解決的問題!

今天的任務是:將昨天 RSS 節點獲取的 40 則新聞,全部彙整成一封郵件,並送到你的信箱。在今天的文章中,我們將:

  1. 連接節點,打通資料流的「任督二脈」。
  2. 暸解參數的表達方式(Fixed / Expression及其設定的方法
  3. Set 節點 的使用以及設定。
  4. 設定排程,讓這個工作流真正實現全自動

今天的目標是打造一條流水線,從定時觸發、獲取新聞、彙整內容,到最後寄送郵件,一氣呵成,就像下面這張圖一樣。
https://ithelp.ithome.com.tw/upload/images/20250918/20178017wphPW6UP8H.png

準備好見證 n8n 的真正魔力了嗎?讓我們開始吧!


一、回顧 — 昨天的小提醒

還記得昨天在測試 Gmail 節點時,我特別提醒大家:「記得先斷開兩個節點之間的連線」。當時我沒有多解釋,只是留下了一個懸念,就像電影結尾的彩蛋一樣。你是不是也很好奇,如果當時我們沒有斷開,直接把 RSS ReadGmail 連在一起並按下執行,會發生什麼宇宙大爆炸的事件?今天,就讓我們來滿足這份好奇心並解釋會發生什麼事。

【不信邪的勇者挑戰】

如果真的想親自嘗試看看會發生什麼事,可以打開前一天的工作流,將 RSS read 節點的輸出端,勇敢地拉一條線連接到 Gmail 節點的輸入端。

https://ithelp.ithome.com.tw/upload/images/20250918/20178017dR7oncVsZj.png

接著,點開 Gmail 節點,填寫 To(收件人)、 Subject (主旨) 欄位、Message(內文),然後深呼吸... 按下右下角的「Execute Workflow

請務必確認 To (收件人) 欄位是你自己的信箱,否則你填的那個人的信箱可能會在接下來的 30 秒內,收到非常多封來自你的神秘郵件騷擾!

你的手機是不是開始瘋狂震動?信箱是不是瞬間被幾十封新郵件淹沒了?

如果你真的這麼做了,恭喜你!你剛剛親身體驗了 n8n 最核心、也最需要被理解的運作機制——自動迴圈 (Automatic Looping)

https://ithelp.ithome.com.tw/upload/images/20250918/20178017fZyD2sYlYD.jpg
上面這個截圖就是昨天我讓它傳了40封的截圖

【重點觀念1:n8n 貼心卻也危險的自動化機制】

這場「郵件轟炸」背後的原因,正是 n8n 一個「貼心卻也危險」的預設機制。當 n8n 偵測到有 40 條新聞 ( items ) 從 RSS read 節點送過來時,它預設的處理方式是 「一個一個來,確保每份都處理到」。也就是說,它會把 Gmail 節點重複執行 40 次,因此每一次都寄出一封信!(等等會提到避免的方法)

這個有趣的(也可能是災難性的)實驗,完美地揭示了我們今天的核心挑戰:如何馴服這條過度熱情的自動化生產線,讓它將 40 份食材,完美地打包成「一份」精美的料理再送出?

二、大廚的祕技 — 用 Edit Fields (Set) 節點彙整 40 則新聞

在 n8n 的智慧廚房中,當我們需要對節點輸出的資料進行整理、篩選、合併或轉換時,通常會請出三位「數據處理大師」。

數據處理三巨頭:Edit Fields, Merge, Aggregate

在 n8n 的節點中,有三款功能強大的資料處理節點,專門用來處理複雜的資料:

  1. Merge 節點 (分支合併器):用於將兩條分支的資料打包在一起

    想像你在同時燉一鍋湯、又烤一個麵包。當兩道菜都準備好時,你需要一個「上菜托盤」把它們組合在一起,變成一份套餐。Merge 節點就是這個托盤,專門用來合併來自不同流程分支的資料。

  2. Aggregate 節點 (清單彙總器)

    這就像現實生活中負責把很多商品進行打包的工作。它的主要工作,是將大量送來的、零散的食材(多個 Item),根據你的指令,分門別類地打包進一個新的大箱子(單一 Item)。

    Merge 和 Aggregate 都是在做合併、整合,但最大的差異是來源,如果來源只有一條,通常用Aggregate;有兩條以上,就用 Merge。也可以混合使用,後續的文章中會有範例。

  3. Edit Fields(Set) 節點 (萬能調理台)

    這是我們今天的主角,也是廚房裡最常用、最萬能的「中央調理台」或「食物處理機」。它能對同一批送來的食材,進行切割、塑形、重新標籤、混合打包等所有你想得到的處理。

一句話總結:Merge 合併不同來源,Aggregate 多筆資料合成一個列表,而 Edit Fields 則處理同一批資料的內部轉換、篩選、調整。

對於今天「將 40 則新聞打包成一封信」的任務,我們今天會用到的是 Edit Fields 節點!

深入 Edit Fields 節點:操作面板

現在,讓我們在 RSS ReadGmail 節點之間添加一個 Edit Fields 的節點。點開它,來認識一下它的操作面板。

https://ithelp.ithome.com.tw/upload/images/20250918/20178017BFztxrlXIQ.png

它主要有兩個核心設定:

  • Mode (操作模式)
    • Manual Mapping (手動設定):這是最常用的模式,就像調理機的「手動面板」。你可以非常直觀地「新增欄位 (Add Field)」,告訴它你要創造什麼新資料 (Key),以及內容是什麼 (Value)。這也是我們今天要用的模式。
    • JSON:這種模式可以讓你直接用 JSON 語法,來定義節點最終要輸出的完整資料結構。這個比較適合熟悉JSON格式的人,後續如果時間足夠,會在提到。
  • Fields to Set (要設定的欄位)
    • Manual Mapping 模式下,這裡就是你要設定輸出欄位的地方,你可以在此新增多個欄位,來一步步完成你的資料調理工作。

Edit Fields 節點設定實作:

節點的設定方式,會依據需求、習慣來有不同的設定方式。今天的範例,我們將透過Edit Fields節點截取出每一條新聞的標題以及新聞連結,然後全部合併在一起

先講設定方式,等一下再來講解:

https://ithelp.ithome.com.tw/upload/images/20250918/20178017g1dh8wNidh.png

  • Mode選擇Manual Mapping,並點選 Feild to Set 中間的區域,Name 設定成 「email_text」、中間資料格式選「String」、滑鼠移到底下的 Value 欄位,右下角會有一個 Fixed/Expression 的切換按鈕,切成Expression後,在欄位中貼上下列的程式碼:
 {{ $items("RSS Read").map(item => {return `標題:${item.json.title} \n 連結:${item.json.link}\n`; }).join('\n') }}

理論上會像上面的截圖一樣綠綠的,而且格子底下會出現資料的預覽。

https://ithelp.ithome.com.tw/upload/images/20250918/20178017P0wKZJhIXc.png

  • 切到節點Settings的部分,並開啟「Execute Once」的開關

Execute Once 就是讓這個節點在 input 不管有幾個 item,就只會執行一次。所以其實今天最剛開始遇到Gmail 一次寄 40 封的信,也可以用這種方式調整、避免。

https://ithelp.ithome.com.tw/upload/images/20250918/20178017tPFV2NaEPP.png

  • 點選「Execute Step」,就會跑出結果,可以發現節點有Output資料了,而且只有一個item,而這個item只有一個key:email_text,這個 key 的值是40條新聞的標題和連結全部整合的文字。

【重點觀念2:Value程式碼解讀】

在這裡,我們用了一小段程式碼來處理我們要的格式。我知道,當你第一次看到這段由 ${}=> 組成的「咒語」時,可能會覺得有點嚇人。

但別擔心!它其實就是我們在對 n8n 這位超高效率的「廚房助理」,下達一連串非常具體的指令。讓我們把這段指令,一個動作一個動作地拆解開來:

  1. $items("RSS Read")
    • 是 n8n 的標準語法,意思就是「獲取指定節點輸出的所有 Item」。這是指令的第一步:指定要處理的對象 👉 想像你去市場買了一整籃食材(RSS 節點的新聞)。在這裡就是「那一整籃新聞」。
    • 很像是你去叫你的助理,把那個叫做『RSS Read』的籃子裡,把全部 40 份新聞食材都拿過來,攤在桌上。
  2. .map(item => {...})
    • .map() 是處理陣列資料的超能力。你可以把它理解成「逐一處理、轉換格式」的指令。它會拿起第一份食材,處理完,放到一個新籃子裡;再拿起第二份,處理完,也放到新籃子裡...直到全部處理完畢。
    • item 則是你要處理什麼,像這邊就是針對每一個 item 去做處理,而 { } 內的內容就是要針對目標要怎麼處理(下面第三點)
  3. return....;
    • return 就是處理之後要回傳什麼。而反引號搭配 ${} 的寫法,是一種可以輕鬆在文字中插入變數的語法,\n 則是程式碼中的「換行符」。
  4. .join('\n\n')
    • .join() 就是「打包組合」的指令。它會把 .map() 處理完的所有結果(那 40 張便利貼),用你指定的「膠水」(這裡是用兩個換行符 \n\n 來製造段落間隔)全部串接成單一的一大段文字

昨天有提到,JSON 的全名是 JavaScript Object Notation。它的名字裡就藏著祕密——它和強大的程式語言 JavaScript 系出同源,是天生的好朋友。

而 n8n 裡的資料幾乎都是以 JSON 格式表達,因此通常都使用 JavaScript 的語法來對這些資料進行各種靈活、強大的批次處理。

【重點觀念3:參數的固定值 vs. 動態表達式

在我們設定某些節點的參數時,你可能會發現當你把滑鼠移到欄位上時,旁邊會出現一個可以切換的 Fixed | Expression 按鈕。

https://ithelp.ithome.com.tw/upload/images/20250918/20178017d7ad0E0hZT.png

這就是 n8n 中傳達參數的兩種核心方式,讓我們來徹底搞懂它:

A. Fixed:寫死的便利貼

  • 就像一張用油性筆寫好、永遠不會變的便利貼。
  • 說明:Fixed 模式非常單純,就是「你輸入什麼,它就是什麼」,是一個靜態、寫死的值。
  • 例如:
    • Gmail 節點的 To (收件人) 欄位,你直接輸入自己的信箱 myemail@gmail.com
    • Subject (主旨) 欄位,你直接輸入文字 【每日新聞摘要】
    • 這些都是 Fixed 值,無論工作流執行多少次,這些內容永遠不會改變。
    • 如下圖,如果剛剛Value貼程式碼的地方切成 fixed 模式,他就是輸出確切的程式碼。
      https://ithelp.ithome.com.tw/upload/images/20250918/20178017FBaIy9A3MY.png

B. Expression:會自動更新的魔法便條

  • 就像一張用魔法墨水寫的便條,它會自動去參考別處的資訊,並把內容即時更新上來。
  • 說明:Expression 模式是 n8n 的靈魂所在!它允許你動態地從前面節點的輸出結果中,抓取資料來填入目前的欄位。這讓你的工作流變得「聰明」且「靈活」。
  • 例如:我們希望郵件內文是當天合併後的 40 則新聞,這也必須用 Expression 來抓取 Edit Fields 節點處理好的結果。

Expression 的資料輸入方式會有兩種,一種是手動去打,語法可以參考下面C點或可以請AI幫忙生成;另一種方式則是在資料為 schema 檢視狀態的時候,直接用滑鼠拖拉過去,等等會實作

C. 拆解表達式(Expression)的魔法語法

要使用這個魔法便條,我們需要學會它的「咒語格式」。其實非常簡單,只有三個核心符號:

  1. {{ ... }} - 魔法信封
    • 比喻:這是一對「魔法信封」。
    • 作用:任何寫在這個信封裡的指令,n8n 都會知道「這不是普通文字,需要動態執行!」。它會打開信封,解析裡面的指令,然後把得到的「結果」填入欄位。所有表達式都必須用它包起來。
  2. $ - 「開始取貨!」的信號
    • 比喻:這是廚房助理聽到的「開始行動!」的信號槍。
    • 作用:當 n8n 在魔法信封裡看到 $ 符號,就代表「接下來我們要開始引用某個節點的資料了」。它是所有資料引用的起點。常見的像是 $json (存取當前 Item 的 JSON 內容) 或 $items() (存取前面指定節點的所有 Items)。
  3. . - 「進入下一層」的指令
    • 這是一個很像是「打開下一層抽屜」的指令。
    • 作用:JSON 資料是巢狀的,像一層層的收納櫃。. (點) 就是用來進入下一層的路徑指標。

在 Expression 模式下,只有 {{ }} 裡面的內容是動態的,信封外的和 Fixed 會是一樣的效果,如下圖。如果語法正確、有獲取資料,會以綠色顯示;失敗則為紅色。如下圖

https://ithelp.ithome.com.tw/upload/images/20250918/20178017XUSDOmBHzP.png

三、上菜 — 連接 Gmail 節點

  • Set 節點連接到 Gmail 節點。此時如果左邊沒有 input 資料,可以先把前面的節點執行過一次(也可以用圖釘功能釘選起來)

  • 收件人先寫自己的信箱、主旨可以先自定、Email Type 選擇 Text

  • 重頭戲來了,這時候 INPUT 切換成 Schema 檢視模式之後,可以把我們要的「email_text」直接拉到 Message 內文之中。(滑鼠左鍵按著拖拉過去,示意圖如下面的gif,可能有點糊)
    drag_data.gif

  • 執行節點,會發現手機就會收到該信件了。如下圖
    https://ithelp.ithome.com.tw/upload/images/20250918/20178017ODGl1s2KAF.jpg

四、實踐自動化做菜

  • 將工作流中的最開頭的「Manual Trigger」換成「Schedule Trigger」

  • 設定「Schedule Trigger 」的各種參數:

    • Trigger Interval:觸發的週期,每多久觸發一次
    • Days between trigger:觸發完一次要間隔幾天
    • Trigger at Hour:觸發的「時」
    • Trigger at Minute:觸發的「分」

    Trigger Interval 選不同的週期,會有不同的細節要設定,上面第二~第四是在 Interval 為Day的情況下可設定的值

  • 右上角存檔後,把「inactive」切換成「active」,就成功囉!

    可以設一個離自己比較近的時間,測試是否有成功在安排的指定時間執行

最終完成的結果:

https://ithelp.ithome.com.tw/upload/images/20250918/20178017X0L4CskZzM.png

五、菜色的變化-節點設定的其他可能

RSS節點變化:

昨天提到很多新聞媒體都有提供RSS,文章中的範例用的是自由時報的即時新聞,但世界上的食材供應商何其多!你可以試著:

  • 換成你感興趣的專業媒體:例如,如果你是行銷人,可以換成 數位時代TechCrunch (英文) 的 RSS Feed。
  • 追蹤特定 YouTube 頻道:你知道嗎?YouTube 頻道也有 RSS!只要拿到頻道 ID,用特定網址就能訂閱,讓你不錯過任何新影片。
  • 鐵人賽的系列文也有提供RSS,所以如果你換成這個系列的 RSS連結 ,那你也可以每天收到這系列文章的更新通知喔~

信件變化:

今天的做法我們是將新聞標題、連結全部整理起來,但其實也可以有多種變化:

  • 加入新聞內容:RSS Feed 通常也包含 contentdescription 欄位。(自由時報的是content欄位)可以試著把它也加入到你的信件內容中,讓你不只獲得標題和連結,而是獲得新聞內容。
  • 過濾只要前 10 則:覺得 40 則新聞太多?在 .map() 之前,你可以先用 .slice(0, 10) 這個 JavaScript 技巧,只取出前 10 則新聞來處理。(後續有機會會提到)

可以試著上網找找看,或問問AI 如何修改 Edit Fields 表達式,讓你的 Email 內容變得更漂亮、或只顯示前 5 則新聞的摘要。

六、結語與明日預告

今天,我們學會了如何用 Edit Fields(Set) 節點,把 n8n 多筆資料整理成一份漂亮的成果。同時也了解了參數的設定方式、這是一個非常關鍵的技能,因為未來你會經常遇到「一堆資料 → 要變成一個整合結果」的情境。

我們也實際將節點串接起來變成一到工作流,但到這邊,你可能會有一些疑問,例如 「這種純文字的信件好醜」「這樣直接貼40則新聞好像有點雜」「能不能將新聞內容進行摘要?」 。如果有這些問題,不急!我們會一一來解決!

明天,我們將把自動化再進一步升級: 不只是「打包新聞寄出」,而是開始學會如何篩選、分類、甚至加上 AI 的智慧處理。這樣你的 Email 就不只是「原封不動的資訊集合」,而是「一份更有價值的智慧摘要」。

準備好將你的純文字列表,升級成一份由 AI 為你量身打造的客製化電子報了嗎?千萬不要錯過!我們明天見!


上一篇
Day 03: 【n8n 初體驗】認識 n8n 操作介面,節點運作原理
下一篇
Day 05: 【n8n x AI】讓AI為你閱讀與思考,再送上一封完美早報
系列文
《把瑣事交給 n8n:零基礎自動化工作流實戰》22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言